ArrayFunc = {}
Array= {}
ArrayFunc.__index=ArrayFunc
setmetatable(Array, ArrayFunc)

ArrayFunc.create = function(self, d)
  array = {}
  array.data = d
  if d==nil then
    array.data = {}
  end
  setmetatable(array, ArrayFunc)
  return array
end

ArrayFunc.append = function(self, item)
  local index = table.maxn(self.data)
  self.data[index+1] = item
end

ArrayFunc.remove = function(self, index)
  local tmp = {}
  local i = 1
  for k,v in ipairs(self.data) do
    if k~=index+1 then tmp[i]=v;i=i+1;end
  end
  self.data=tmp
end

ArrayFunc.find = function(self, value)
  for k,v in ipairs(self.data) do
    if v==value then return k-1; end
  end
  return -1
end

ArrayFunc.at = function(self, index)
  return self.data[index+1]
end

ArrayFunc.size = function(self)
  return table.maxn(self.data) 
end

ArrayFunc.sort = function(self, comp)
  table.sort(self.data, comp)
end

ArrayFunc.log = function(self)
  for i=0,self:size()-1 do
    print(i, self:at(i))
  end
end

--[[
local a=Array:create()
a:append(11)
a:append(22)
a:append(33)
a:append(44)
a:log()
print("remove")
a:remove(1)
a:log()
print("append")
a:append(22)
a:log()
print("sort")
a:sort(function(a,b) return a>b end)
a:log()
]]


